#ifndef OSZLOP_H
#define OSZLOP_H

#include <vector>
#include <string>

class Oszlop_base
{
protected:
	std::string _nev;
	std::string _tipus;
	bool _ures;
public:
	Oszlop_base(const std::string s) : _nev(s) {}
	std::string Tipus() { return _tipus; }
	std::string Nev() { return _nev; }
	virtual std::string Ertekek() = 0;
	virtual ~Oszlop_base() {}
	virtual void Feltolt(const std::string& e) = 0;
	virtual void Torol(const int& ind) = 0;
};

class Oszlop_log : public Oszlop_base
{
	std::vector<bool> _ertekek;
public:
	std::string Ertekek();
	Oszlop_log(const std::string s) : Oszlop_base(s) { _tipus = "logikai"; }
	void Feltolt(const std::string& e);
	void Torol(const int& ind) { _ertekek.erase(_ertekek.begin()+ind); }
};

class Oszlop_egesz : public Oszlop_base
{
	std::vector<int> _ertekek;
public:
	std::string Ertekek();
	Oszlop_egesz(const std::string s) : Oszlop_base(s) { _tipus = "egesz"; }
	void Feltolt(const std::string& e);
	void Torol(const int& ind) { _ertekek.erase(_ertekek.begin()+ind); }
};

class Oszlop_valos : public Oszlop_base
{
	std::vector<double> _ertekek;
public:
	std::string Ertekek();
	Oszlop_valos(const std::string s) : Oszlop_base(s) { _tipus = "valos"; }
	void Feltolt(const std::string& e);
	void Torol(const int& ind) { _ertekek.erase(_ertekek.begin()+ind); }
};

class Oszlop_szoveg : public Oszlop_base
{
	std::vector<std::string> _ertekek;
public:
	std::string Ertekek();
	Oszlop_szoveg(const std::string s) : Oszlop_base(s) { _tipus = "szoveg"; }
	void Feltolt(const std::string& e) { _ertekek.push_back(e); }
	void Torol(const int& ind) { _ertekek.erase(_ertekek.begin()+ind); }
};

#endif